PART 0 · 개념 기초

CWA vs OWA
RDB와 온톨로지의 근본적인 철학 차이

"모른다"는 것을 어떻게 해석하느냐에 따라, 시스템이 내리는 결론이 완전히 달라집니다.

1. 두 가지 세계관

데이터베이스에 어떤 사실이 없을 때, 우리는 그것을 어떻게 해석해야 할까요?
RDB와 온톨로지는 이 질문에 근본적으로 다른 답을 내립니다.

CWA

Closed World Assumption
닫힌 세계 가정

"데이터베이스에 없으면 거짓이다."

세상의 모든 참인 사실은 이미 DB 안에 있다고 가정합니다.
없으면? 그건 존재하지 않는 것입니다.

이 방식을 따르는 기술:
RDB (SQL), Prolog, Neo4j (GraphDB)

OWA

Open World Assumption
열린 세계 가정

"데이터베이스에 없으면 모르는 것이다."

세상에는 아직 기록되지 않은 사실이 있을 수 있다고 가정합니다.
없으면? 그건 단지 아직 모르는 것입니다.

이 방식을 따르는 기술:
OWL/RDF 기반 온톨로지

Neo4j(GraphDB)는 "그래프"라는 이름 때문에 OWA로 오해하기 쉽지만, RDB처럼 CWA를 따릅니다.
OWA는 온톨로지(OWL/RDF)만의 고유한 특성입니다. 이 차이가 이 페이지의 핵심입니다.

2. 같은 상황, 완전히 다른 결론

동일한 데이터 부재 상황에서 두 시스템이 어떻게 다르게 반응하는지 봐요.

예시 ① — 약물 부작용 데이터베이스

상황: drug_interactions 테이블에 "A약 + B약 상호작용" 데이터가 없다.

CWA · 닫힌 세계

"A약과 B약은 상호작용이 없다."
→ 의사가 A약과 B약을 함께 처방합니다.
→ 실제로는 아직 연구가 안 된 것뿐인데, 안전하다고 판단해버립니다.

OWA · 열린 세계

"A약과 B약의 상호작용은 알 수 없다."
→ 시스템이 "아직 검증되지 않음"으로 표시합니다.
→ 의사에게 "알려진 데이터 없음, 주의 필요" 경고를 줄 수 있습니다.

예시 ② — 범죄 기록 조회

상황: criminal_records 테이블에 홍길동의 기록이 없다.

CWA · 닫힌 세계

"홍길동은 범죄 기록이 없다 → 깨끗하다."
→ 단순 조회만으로 결백 판정.
→ 기록이 누락됐거나 다른 시스템에 있을 가능성을 고려하지 않습니다.

OWA · 열린 세계

"이 시스템에는 홍길동의 기록이 없다. 다른 곳에 있을 수 있다."
→ "현재 연결된 데이터 기준 없음"으로 표시.
→ 다른 관련 지식 소스까지 탐색을 계속합니다.

예시 ③ — 일상적인 예: 항공편 조회

상황: DB에 "서울 → 제주 직항" 데이터가 없다.

CWA · 닫힌 세계

"서울 → 제주 직항은 없다."
→ 항공 예매 시스템에서는 이게 맞아요.
→ DB에 등록된 항공편이 전부이기 때문입니다. CWA가 적합한 상황입니다.

OWA · 열린 세계

"서울 → 제주 직항이 있는지 모른다."
→ 지식 그래프에서는 이렇게 처리해요.
→ 알려지지 않은 항공편이 존재할 가능성을 열어둡니다. 이 상황엔 불필요한 복잡도입니다.

CWA와 OWA 중 어느 것이 더 낫다는 게 아닙니다.
핵심은 "우리 DB에 있는 데이터가 세상의 전부인가?"라는 질문입니다.

"네, 전부입니다" → CWA · 닫힌 세계가 적합합니다.
항공편, 재고, 주문처럼 시스템이 곧 세계의 전부인 경우입니다.
등록되지 않은 항공편은 진짜로 없는 항공편입니다.

"아니요, 일부입니다" → OWA · 열린 세계가 적합합니다.
의학, 법률, 과학 지식처럼 세상의 모든 사실을 다 기록할 수 없는 경우입니다.
DB에 없다고 해서 "없다"고 단정하면 위험한 판단이 됩니다.

3. SQL의 NULL — CWA의 균열

재미있는 것은 CWA 기반의 RDB도 "모른다"는 상태가 필요하다는 걸 인식했다는 점입니다.
그 결과물이 바로 NULL이에요.

NULL이 생겨난 이유

RDB를 만든 에드가 코드(Edgar Codd)는 두 가지가 다르다는 걸 알았어요.

"값이 없다" — 예: 전화번호 칸이 비어있다 (아예 입력을 안 한 것)
"값을 모른다" — 예: 전화번호가 있긴 한데 아직 파악을 못 한 것

이 "모른다"는 상태를 표현하기 위해 NULL을 도입했습니다.
즉, NULL의 원래 의미는 "알 수 없음(Unknown)"이에요.

그런데 실제로는 대부분의 개발자가 NULL을 그냥 "비어있다, 없다"라는 뜻으로 사용합니다.
원래의 철학적 의미가 실무에서 퇴색된 셈이죠.

NULL의 문제 — 직관에 반하는 결과

SQL은 보통 TRUE / FALSE 두 가지로 판단하지만,
NULL이 끼면 TRUE / FALSE / UNKNOWN 세 가지가 됩니다.
이걸 Three-Valued Logic(3값 논리)이라고 불러요.

이게 직관에 반하는 결과를 만들어냅니다.

NULL = NULLFALSE ("모름"과 "모름"이 같은지? → 알 수 없으니 거짓!)
NULL != NULLUNKNOWN
1 + NULLNULL (알 수 없는 값에 뭘 더하면? → 여전히 알 수 없음)

그래서 WHERE age = NULL은 아무 결과도 안 나오고,
반드시 WHERE age IS NULL이라는 특수 문법을 써야 해요.

왜 이렇게 어색할까요?
CWA("없으면 거짓") 기반으로 만들어진 RDB에, OWA("없으면 모름")의 개념을 억지로 끼워넣었기 때문입니다.
태생적으로 맞지 않는 옷을 입힌 셈이에요.

반면, 온톨로지는 처음부터 OWA로 설계되었기 때문에 "모른다"가 자연스럽습니다.
트리플(데이터)이 없으면 → "아직 모름"이 기본값이에요.
NULL 같은 특별한 처리 없이도, 정보가 없는 상태를 자연스럽게 표현할 수 있습니다.

4. LLM과 AI에서 왜 중요한가?

CWA vs OWA는 단순히 데이터베이스 이론이 아니라, AI 시스템을 설계할 때 매우 중요한 철학적 선택이기도 합니다.

LLM은 어느 쪽인가?

흥미롭게도, LLM(GPT, Claude 등)은 OWA에 가깝습니다.
학습 데이터에 없는 것도 "없다"고 단정하지 않고, 확률적으로 추론합니다.

예를 들어, LLM에게 "홍길동은 어느 팀 소속이야?"라고 물으면
학습 데이터에 답이 없어도 "없다"고 하지 않고, 관련 지식을 조합해서 답하려고 합니다.

그런데 이것이 바로 환각(Hallucination)의 원인이에요.
"모른다"는 상황에서 "그럴듯하지만 사실이 아닌 답"을 만들어버리기 때문입니다.

즉, LLM의 OWA적 태도는 장점이자 약점입니다.
열린 마음으로 추론하되, 근거 없이 추론하면 거짓말이 되는 거죠.

GraphRAG — LLM의 환각을 막는 전략

질문: "홍길동은 어느 팀 소속이야?"

지식 그래프에 정보가 없는 경우:
CWA 방식: "홍길동은 어느 팀에도 속하지 않는다" → 틀린 정보를 사실처럼 생성할 위험
OWA 방식: "홍길동의 팀 소속 정보가 없습니다" → "모른다"고 정직하게 답변

GraphRAG는 LLM에게 지식 그래프의 검증된 사실만 제공해서,
근거가 있는 것만 답하고, 근거가 없으면 "모른다"고 말하게 만듭니다.

LLM의 OWA적 추론 능력 + 지식 그래프의 검증된 사실 = GraphRAG
이 조합이 환각을 줄이는 핵심 전략입니다.

엔터프라이즈 AI에서는 이를 "근거 기반 답변(Grounded Response)"이라고 부릅니다.
LLM이 임의로 사실을 만들어내지 못하도록, 지식 그래프에 있는 사실을 근거로만 답변하게 제한하는 것입니다.
"모르면 모른다"고 말할 수 있는 AI — 이것이 신뢰할 수 있는 AI의 출발점입니다.

5. 핵심 비교표
구분 CWA (닫힌 세계) OWA (열린 세계)
기본 전제 DB에 없으면 거짓 DB에 없으면 알 수 없음
세계 모델 DB = 세계의 전부 DB = 세계의 일부
추론 방식 부재 = 부정의 근거 부재 = 미지의 가능성
대표 기술 RDB (SQL), Prolog, Neo4j (GraphDB) OWL/RDF (온톨로지), GraphRAG
잘 맞는 상황 항공편, 재고, 주문처럼 완전한 데이터가 보장되는 경우 의학, 법률, 지식처럼 세상의 사실이 불완전하게 기록되는 경우
AI와의 관계 없는 것 = 확실히 없음 (과도한 단정) 없는 것 = 모름 (정직한 불확실성 표현)
6. 핵심 정리